package io.dy.guarded;

import io.dy.utils.ThreadUtils;

/**
 * @author dmj
 * @date 2024年03月22日 下午4:17
 * 保护性暂停 案列
 * 线程一 等待 线程二 的计算结果 再进行别的操作
 */
@SuppressWarnings("all")
public class GuardedObjectCase {

    public static void main(String[] args) {
        //共享对象
        GuardedObject<Integer> guardedObject = new GuardedObject<Integer>();

        new Thread(()->{
            ThreadUtils.printThreadLog("开始获取结果");
            Integer value = guardedObject.getValue(3000);
            ThreadUtils.printThreadLog("获取结果为:" + value);
            if(value == null){
                ThreadUtils.printThreadLog("等待超时。。。。");
            }else{
                int handleValue = value/2;
                ThreadUtils.printThreadLog("后续处理结果为:" + handleValue);
            }
        },"线程一").start();


        new Thread(()->{
            ThreadUtils.printThreadLog("开始生产结果");
            int value = 0;
            for (int i = 0; i < 20; i++) {
                ThreadUtils.sleepMillis(500);
                value += i;
            }
            ThreadUtils.printThreadLog("生产结果最终值为:" + value);
            guardedObject.generate(value);
        },"线程二").start();
    }
}
